// ---------------------------------------
// Template: cls.cs	rel: 3.0.0.0 NoDal
// ---------------------------------------
using System;
using System.Data;
using IGCal.Collections;
using IGCal.Funzioni;
using IGCal.DB;

namespace Calcio.Tabelle
{
	/// <summary>
	/// Middle tier per accedere alla tabella RuoliDirigentiInGara
	/// </summary>
	public class RuoloDirigenteInGaraCollection : IGCalDictionaryBase
	{

		/// <summary>
		/// Crea una nuova istanza della collection
		/// </summary>
		public RuoloDirigenteInGaraCollection()
		{
		}

		/// <summary>
		/// Recupera RuoloDirigenteInGara dalla collection
		/// </summary>
		public RuoloDirigenteInGara this[int ID]
		{
			get
			{
				RuoloDirigenteInGara RuoloDirigenteInGara = new RuoloDirigenteInGara();
				
				RuoloDirigenteInGara.SetID(ID);
				
				
				RuoloDirigenteInGara = (RuoloDirigenteInGara) InnerHashtable[RuoloDirigenteInGara];

				return RuoloDirigenteInGara;
			}
		}

		/// <summary>
		/// Rigenera la collection leggendo dalla tabella RuoliDirigentiInGara
		/// </summary>
		/// <param name="connection">Connessione al database da cui leggere</param>
		/// <param name="sqlWhere">Clausola where da utilizzare nella query (null o "" per leggere tutti i record)</param>
		public void Refresh(Connection connection, string sqlWhere)
		{
			InnerHashtable.Clear();

			DataTable dataTable;
			RuoloDirigenteInGara RuoloDirigenteInGara;

			string sql = GetQuery(sqlWhere);

			dataTable = connection.GetDataTable(sql);

			foreach (DataRow row in dataTable.Rows)
			{
				RuoloDirigenteInGara = new RuoloDirigenteInGara();
				RuoloDirigenteInGara.ReadFromRow(row);
				InnerHashtable.Add(RuoloDirigenteInGara, RuoloDirigenteInGara);
			}
		}

		/// <summary>
		/// Recupera RuoloDirigenteInGara dalla tabella RuoliDirigentiInGara
		/// </summary>
		/// <param name="connection">Connessione al database da cui leggere</param>
		/// <param name="ID">ID</param>
		/// <returns>RuoloDirigenteInGara</returns>
		public static RuoloDirigenteInGara Read(Connection connection, int ID)
		{
			RuoloDirigenteInGara RuoloDirigenteInGara;

			DataRow row;

			try
			{
				row = GetRecord(connection, null, ID);
			}
			catch
			{
				return null;
			}

			RuoloDirigenteInGara = new RuoloDirigenteInGara();
			RuoloDirigenteInGara.ReadFromRow(row);
			return RuoloDirigenteInGara;
		}

		/// <summary>
		/// Costruisce la query sulla tabella
		/// </summary>
		/// <param name="SQLWhere">Clausola where da utilizzare nella query (null o string.Empty per leggere tutti i record)</param>
		/// <returns>La query</returns>
		private static string GetQuery(string SQLWhere)
		{
			if (SQLWhere == null || SQLWhere == string.Empty)
				return "Select * From RuoliDirigentiInGara";
			else
				return "Select * From RuoliDirigentiInGara Where " + SQLWhere;
		}

		/// <summary>
		/// Recupera un record dalla tabella (se non c'e' o ce ne sono piu' di uno viene rilanciata un'eccezione)
		/// </summary>
		/// <param name="connection">Connessione</param>
		/// <param name="dataAdapter">DataAdapter nel caso in cui la tabella debba essere aperta in scrittura</param>
		/// <param name="ID">ID</param>
		/// <returns>La DataRow relativa al record</returns>
		private static DataRow GetRecord(Connection connection, DataAdapter dataAdapter, int ID)
		{
			string SQLWhere = null;
			DataTable dataTable;

			SQLWhere += string.Format(" And ID = {0}", ID);

			string SQL = GetQuery(SQLWhere.Substring(4));

			if (dataAdapter != null)
				dataTable = connection.GetDataTable(dataAdapter, SQL);
			else
				dataTable = connection.GetDataTable(SQL);

			if (dataTable.Rows.Count == 0)
				throw new Exception("Record non trovato");

			if (dataTable.Rows.Count > 1)
				throw new Exception("La chiave primaria non identifica solo un record");

			return dataTable.Rows[0];
		}
	}







	/// <summary>
	/// Middle tier per accedere ad un record della tabella RuoliDirigentiInGara
	/// </summary>
	public class RuoloDirigenteInGara
	{
		private int _ID;
		private string _NomeRuolo;
		private int _Ordine;
		private bool _ObbligatorioInCasa;
		private bool _ObbligatorioFuoriCasa;
		private int _NumeroRichiestiCasa;
		private int _NumeroRichiestiFuoriCasa;

		/// <summary>
		/// Crea una nuova istanza della classe
		/// </summary>
		public RuoloDirigenteInGara()
		{
		}

		/// <summary>
		/// Legge le propriet� della classe dalla row
		/// </summary>
		/// <param name="row">Row da leggere</param>
		public void ReadFromRow(DataRow row)
		{
			_ID = General.DBToInt(row["ID"]);
			_NomeRuolo = General.DBToString(row["NomeRuolo"]);
			_Ordine = General.DBToInt(row["Ordine"]);
			_ObbligatorioInCasa = General.DBToBool(row["ObbligatorioInCasa"]);
			_ObbligatorioFuoriCasa = General.DBToBool(row["ObbligatorioFuoriCasa"]);
			_NumeroRichiestiCasa = General.DBToInt(row["NumeroRichiestiCasa"]);
			_NumeroRichiestiFuoriCasa = General.DBToInt(row["NumeroRichiestiFuoriCasa"]);


		}

		/// <summary>
		/// Legge/Imposta ID
		/// </summary>
		public int ID
		{
			get
			{
				return _ID;
			}

		}

		/// <summary>
		/// Imposta ID
		/// </summary>
		/// <param name="ID">nuovo valore diID</param>
		internal void SetID(int ID)
		{
			_ID = ID;
		}

		/// <summary>
		/// Legge/Imposta NomeRuolo
		/// </summary>
		public string NomeRuolo
		{
			get
			{
				return _NomeRuolo;
			}

			set
			{
				_NomeRuolo = value;
			}
		}
		/// <summary>
		/// Legge/Imposta Ordine
		/// </summary>
		public int Ordine
		{
			get
			{
				return _Ordine;
			}

			set
			{
				_Ordine = value;
			}
		}
		/// <summary>
		/// Legge/Imposta ObbligatorioInCasa
		/// </summary>
		public bool ObbligatorioInCasa
		{
			get
			{
				return _ObbligatorioInCasa;
			}

			set
			{
				_ObbligatorioInCasa = value;
			}
		}
		/// <summary>
		/// Legge/Imposta ObbligatorioFuoriCasa
		/// </summary>
		public bool ObbligatorioFuoriCasa
		{
			get
			{
				return _ObbligatorioFuoriCasa;
			}

			set
			{
				_ObbligatorioFuoriCasa = value;
			}
		}

		/// <summary>
		/// Legge/Imposta NumeroRichiestiCasa
		/// </summary>
		public int NumeroRichiestiCasa
		{
			get
			{
				return _NumeroRichiestiCasa;
			}

			set
			{
				_NumeroRichiestiCasa = value;
			}
		}

		/// <summary>
		/// Legge/Imposta NumeroRichiestiFuoriCasa
		/// </summary>
		public int NumeroRichiestiFuoriCasa
		{
			get
			{
				return _NumeroRichiestiFuoriCasa;
			}

			set
			{
				_NumeroRichiestiFuoriCasa = value;
			}
		}

		/// <summary>
		/// Recupera l'hash code
		/// </summary>
		/// <param name="ID">ID</param>
		/// <returns>L'hash code</returns>
		public static int GetHashCode(int ID)
		{
			int hash = ID.GetHashCode();

			return hash;
		}


		/// <summary>
		/// Confronta gli elementi
		/// </summary>
		/// <param name="a">Primo elemento</param>
		/// <param name="b">Secondo elemento</param>
		/// <returns>true se gli elementi sono uguali altrimenti false</returns>
		public static bool operator == (RuoloDirigenteInGara a, RuoloDirigenteInGara b)
		{
			if (object.Equals(a, null))
				return (object.Equals(b, null));
			else if (object.Equals(b, null))
				return false;
			else
				return (a._ID == b._ID);
		}

		/// <summary>
		/// Confronta gli elementi
		/// </summary>
		/// <param name="a">Primo elemento</param>
		/// <param name="b">Secondo elemento</param>
		/// <returns>true se gli elementi sono diversi altrimenti false</returns>
		public static bool operator != (RuoloDirigenteInGara a, RuoloDirigenteInGara b)
		{
			if (object.Equals(a, null))
				return (!object.Equals(b, null));
			else if (object.Equals(b, null))
				return true;
			else
				return !(a._ID == b._ID);
		}

		/// <summary>
		/// Confronta l'elemento corrente con l'elemento specificato
		/// </summary>
		/// <param name="obj">Oggetto da confrontare</param>
		/// <returns>true se gli elementi sono uguali altrimenti false</returns>
		public override bool Equals(object obj)
		{
			if (obj is RuoloDirigenteInGara)
			{
				RuoloDirigenteInGara RuoloDirigenteInGara = (RuoloDirigenteInGara) obj;
				return (RuoloDirigenteInGara._ID == this._ID);
			}

			return base.Equals(obj);
		}

		/// <summary>
		/// Recupera l'hash code
		/// </summary>
		/// <returns>L'hash code</returns>
		public override int GetHashCode()
		{
			return GetHashCode(_ID);
		}
	}
}

